/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 刘柄华
 * Date: 2022-06-14
 * Time: 22:55
 */
public class Test05 {
    /*
    *  盛最多水的容器
    * 给定一个长度为 n 的整数数组height。有n条垂线，第 i 条线的两个端点是(i, 0)和(i, height[i])。
    * 找出其中的两条线，使得它们与x轴共同构成的容器可以容纳最多的水。
    * 返回容器可以储存的最大水量。
    *
    * 思路:移动长板，面积只会变得更小：
            当遇到更短的板子，面积变小
            当遇到更长的板子，面积仍然变小（因为容器面积取决于短板，长板变长没有用）
            当长板子长度不变，面积还是变小
          移动短板有可能使得面积变大或变小。 选择改变短板，才有可能使面积变大
    * */
    public int maxArea(int[] height) {
        //初始化双指针分列水槽左右两端，循环每轮将短板向内移动一格，并更新面积最大值，直到两指针相遇时跳出；即可获得最大面积
        int i = 0, j = height.length - 1, res = 0;
        while(i < j) {
            res = height[i] < height[j] ?
                    Math.max(res, (j - i) * height[i++]):
                    Math.max(res, (j - i) * height[j--]);
        }
        return res;
    }

}
